class Solution1567 {
    public int getMaxLen(int[] nums) {
        int n = nums.length ; 
        //负数 : f[i] 以 i 结尾时 , 乘积为负数的 最长子数组长度 ; 
        int[] f = new int[n] ;
        // 正数 : 
        int[] g = new int[n] ; 
        if(nums[0] < 0){
           f[0] = 1 ; 
        }else if(nums[0] > 0){
          g[0] =1 ; 
        }
        
        int max = g[0] ; 

        for(int i=1 ; i < n; i ++){
           int cur = nums[i] ; 
           if(cur > 0){
         
            g[i] = g[i-1] + 1 ;            
            if(f[i-1] > 0){
                f[i] = f[i-1] + 1 ; 
            }
           }else if(cur < 0){
             f[i] =  g[i-1] + 1 ; 
             if(f[i-1] > 0){
              g[i] = f[i-1] + 1 ; 
             }
           }
           max = Math.max(max , g[i]) ; 
        }

       return max ;         
    }
}